from PyQt5.QtCore import QObject, QTimer, pyqtSignal

class Countdown(QObject):
    # 定义一个信号，用于在倒计时更新时发出通知
    countdown_updated = pyqtSignal(int)
    # 定义一个信号，用于在倒计时结束时发出通知
    countdown_finished = pyqtSignal()

    def __init__(self, limit_time):
        super().__init__()
        self.limit_time = limit_time
        self.countdown_value = limit_time  # 初始倒计时值，例如 60 秒
        self.timer = QTimer()  # 创建 QTimer 对象
        self.timer.timeout.connect(self.update_countdown)  # 连接 timeout 信号到更新倒计时的方法
        self.is_paused = False  # 倒计时是否暂停的标志
        self.countdown_active = False  # 倒计时是否正在进行的标志

    def start(self):
        if not self.countdown_active:
            self.countdown_active = True
            self.is_paused = False
            self.timer.start(1000)  # 每秒更新一次倒计时
            self.update_countdown()  # 立即更新一次以显示初始值（可选）

    def pause(self):
        self.is_paused = True
        self.timer.stop()

    def resume(self):
        if self.is_paused:
            self.is_paused = False
            self.timer.start()  # 注意：这里可能需要传递毫秒数参数，但为了与pause()配合，这里省略，因为它之前应该是以1000ms启动的

    def stop(self):
        self.timer.stop()
        self.countdown_active = False
        self.is_paused = False  # 可选：重置暂停状态，这取决于您是否希望在停止后能够立即重新开始而不需要重置对象

    def update_countdown(self):
        if self.countdown_value > 0:
            self.countdown_value -= 1
            # 发出信号，传递当前倒计时值
            self.countdown_updated.emit(self.countdown_value)
        else:
            self.timer.stop()
            self.countdown_active = False
            # 发出倒计时结束信号
            self.countdown_finished.emit()